//#include <stdio.h>
//#include <string.h>
//void sort(char **q){
//	int i,j;
//	char *tmp;
//	for(i=0;i<9;i++)
//	{
//		for(j=0;j<9-i;j++)
//		{
//			if(strcmp(q[j],q[j+1])>0)
//			{
//				tmp=q[j];
//				q[j]=q[j+1];
//				q[j+1]=tmp;
//			}
//		}
//	}
//}
//int main(){
//	char str[10][20],*ptr[10];
//	int i=0;
//	for(i=0;i<10;i++){
//		ptr[i]=str[i];
//		scanf("%s",str[i]);
//	}
//	sort(ptr);
//	for(i=0;i<10;i++)
//		printf("%s\n",ptr[i]);
//	return 0;
//}

//#include <stdio.h>
//#include <math.h>
//int mystrcmp(char *q1,char *q2)
//{
//	while(*q1==*q2&&*q1&&*q2)
//	{
//		q1++;
//		q2++;
//	}
//	return abs(*q1-*q2);
//}
//int main(){
//	char str1[100],str2[100];
//	gets(str1);
//	gets(str2);
//	printf("%d",mystrcmp(str1,str2));
//	printf("%s",str1);
//	printf("%s",str2);
//	return 0;
//}

//#include <stdio.h>
//int judge (int num){
//	int i=0,count=0;
//	for(i=1;i<num;i++)
//		if(num%i==0)
//			count+=i;
//	if(count==num)
//		return num;
//	else
//		return 0;
//}
//
//int main(){
//	int i=0;
//	for(i=0;i<=1000;i++)
//		if(judge(i)!=0)
//			printf("%d\n",i);
//	return 0;
//}

//#include <stdio.h>
//void fun(int a[][3])
//{
//	int i=0,j=0,tmp;
//	for(i=0;i<3;i++)
//	{
//		for(j=0;j<i;j++)
//		{
//			tmp=a[i][j];
//			a[i][j]=a[j][i];
//			a[j][i]=tmp;
//		}
//	}
//}
//int main(){
//	int arr[3][3],i=0,j=0;
//	for(i=0;i<3;i++)
//		for(j=0;j<3;j++)
//			scanf("%d",*(arr+i)+j);
//	fun(arr);
//	for(i=0;i<3;i++)
//	{for(j=0;j<3;j++)
//			printf("%d ",arr[i][j]);
//	printf("\n");}
//	return 0;
//}

//#include <stdio.h>
//void fun(int num){
//	int i=2;
//	printf("%d=",num);
//	while(num!=1){
//		if(num%i==0)
//		{
//			printf("%d*",i);
//			num/=i;
//		}
//		else
//			i++;
//	}
//	printf("\b ");
//}
//int main()
//{
//	int i=100;
//	for(i=100;i<1000;i++)
//	{
//		fun(i);
//		printf("\n");
//	}
//	return 0;
//}

//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#include <time.h>
//struct Stu{
//	char name[40];
//	int num;
//}Data[4]={"ZS",0,"LS",0,"WW",0,"ZL",0};
//void vote(){
//	int i=0,j=0,k=0;
//	char arr[4][10]={"ZS","LS","WW","ZL"};
//	for(i=0;i<100;i++)
//	{
//		j=4*rand()/RAND_MAX;
//		for(k=0;k<4;k++)
//			if(strcmp(Data[k].name,arr[j])==0)
//				break;
//		Data[k].num++;
//	}
//}
//
//int main()
//{
//	int i=0;
//	srand((unsigned)time(NULL));
//	vote();
//	for(i=0;i<4;i++)
//		printf("%s\t%d\n",Data[i].name,
//			Data[i].num);
//	return 0;
//}

//#include <stdio.h>
//struct Stu{
//	int num;
//	float score[3];
//	float sum;
//	float ave;
//};
//void Create(struct Stu list[]){
//	int i;
//	for(i=0;i<10;i++)
//	{
//		scanf("%d %f %f %f",&list[i].num,&list[i].score[0],&list[i].score[1],&list[i].score[2]);
//		list[i].sum=list[i].score[0]+list[i].score[1]+list[i].score[2];
//		list[i].ave=list[i].sum/3;
//	}
//}
//void sort(struct Stu list[])
//{
//	int i,j;
//	struct Stu tmp;
//	for(i=0;i<9;i++)
//	{
//		for(j=0;j<9-i;j++)
//		{
//			if(list[j].sum<list[j+1].sum)
//			{
//				tmp=list[j];
//				list[j]=list[j+1];
//				list[j+1]=tmp;
//			}
//		}
//	}
//}
//
//int main(){
//	int i=0;
//	struct Stu list[10];
//	Create(list);
//	sort(list);
//	for(i=0;i<10;i++)
//		printf("%d %.2f %.2f %.2f %.2f %.2f\n",list[i].num,list[i].score[0],list[i].score[1],list[i].score[2],list[i].sum,list[i].ave);
//	return 0;
//}

//#include <stdio.h>
//struct man{
//	char name[20];
//	int age;
//};
//int sort(struct man list[]){
//	int i,max=0;
//	for(i=1;i<10;i++)
//		if(list[max].age<list[i].age)
//			max=i;
//	return max;
//}
//
//int main(){
//	struct man list[10];
//	int i=0,max;
//	for(i=0;i<10;i++)
//	{
//		scanf("%s",list[i].name);
//		scanf("%d",&list[i].age);
//	}
//	max=sort(list);
//	printf("%s %d\n",list[max].name,list[max].age);
//	return 0;
//}

#include <stdio.h>
#include <stdlib.h>
struct list{
	int num;
	float score;
	struct list* next;
};
typedef struct list LinkNode;
typedef struct list* LinkList;
LinkList CreateList(){
	LinkList head=NULL,p=NULL,q=NULL;
	int anum;
	float mark;
	while(1){
		scanf("%d",&anum);
		scanf("%f",&mark);
		if(anum>0)
		{
			q=(LinkList)malloc(sizeof(LinkNode));
			q->num=anum;
			q->score=mark;
			q->next=NULL;
		}
		else
			break;
		if(head==NULL)
			head=p=q;
		else
			p->next=q;
		p=q;
	}
	return head;
}

LinkList AddNode(LinkList head,int anum,float mark){
	LinkList p=head,q=NULL;
	q=(LinkList)malloc(sizeof(LinkNode));
	q->num=anum;
	q->score=mark;
	q->next=NULL;
	if(!head)
		head=q;
	else{
		while(p->next!=NULL)
			p=p->next;
		p->next=q;
	}
	return head;
}
LinkList CompareNode(LinkList head1,LinkList head2){
	LinkList head3=NULL;
	if(head1==NULL&&head2)
	{
		head3=head2;
		return head3;
	}
	if(head2==NULL&&head1)
	{
		head3=head1;
		return head3;
	}
	while(head1!=NULL&&head2!=NULL)
	{
		if(head1->num<head2->num)
		{
			head3=AddNode(head3,head1->num,head1->score);
			head1=head1->next;
		}
		else 
		{
			head3=AddNode(head3,head2->num,head2->score);
			head2=head2->next;
		}
	}
	if(head1){
		while(head1){
			head3=AddNode(head3,head1->num,head1->score);
			head1=head1->next;
		}
	}
	if(head2){
		while(head2){
			head3=AddNode(head3,head2->num,head2->score);
			head2=head2->next;
		}
	}return head3;
}
void PrintList(LinkList head)
{
	LinkList p=head;
	while(p){
		printf("%d %f\n",p->num,p->score);
		p=p->next;
	}
}
void FreeList(LinkList head){
	LinkList p,q;
	p=q=head;
	while(p){
		q=p->next;
		free(p);
		p=q;
	}
}
int main()
{
	LinkList head1,head2,head3;
	head1=CreateList();
	head2=CreateList();
	head3=CompareNode(head1,head2);
	PrintList(head3);
	if(head3!=head1&&head3!=head2)
		FreeList(head3);
	FreeList(head1);
	FreeList(head2);
	return 0;
}
